home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_scope.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  17KB  |  556 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. from test.test_support import verify, TestFailed, check_syntax
  5. import warnings
  6. warnings.filterwarnings('ignore', 'import \\*', SyntaxWarning, '<string>')
  7. print '1. simple nesting'
  8.  
  9. def make_adder(x):
  10.     
  11.     def adder(y):
  12.         return x + y
  13.  
  14.     return adder
  15.  
  16. inc = make_adder(1)
  17. plus10 = make_adder(10)
  18. verify(inc(1) == 2)
  19. verify(plus10(-2) == 8)
  20. print '2. extra nesting'
  21.  
  22. def make_adder2(x):
  23.     
  24.     def extra():
  25.         
  26.         def adder(y):
  27.             return x + y
  28.  
  29.         return adder
  30.  
  31.     return extra()
  32.  
  33. inc = make_adder2(1)
  34. plus10 = make_adder2(10)
  35. verify(inc(1) == 2)
  36. verify(plus10(-2) == 8)
  37. print '3. simple nesting + rebinding'
  38.  
  39. def make_adder3(x):
  40.     
  41.     def adder(y):
  42.         return x + y
  43.  
  44.     x = x + 1
  45.     return adder
  46.  
  47. inc = make_adder3(0)
  48. plus10 = make_adder3(9)
  49. verify(inc(1) == 2)
  50. verify(plus10(-2) == 8)
  51. print '4. nesting with global but no free'
  52.  
  53. def make_adder4():
  54.     
  55.     def nest():
  56.         
  57.         def nest():
  58.             
  59.             def adder(y):
  60.                 return global_x + y
  61.  
  62.             return adder
  63.  
  64.         return nest()
  65.  
  66.     return nest()
  67.  
  68. global_x = 1
  69. adder = make_adder4()
  70. verify(adder(1) == 2)
  71. global_x = 10
  72. verify(adder(-2) == 8)
  73. print '5. nesting through class'
  74.  
  75. def make_adder5(x):
  76.     
  77.     class Adder:
  78.         
  79.         def __call__(self, y):
  80.             return x + y
  81.  
  82.  
  83.     return Adder()
  84.  
  85. inc = make_adder5(1)
  86. plus10 = make_adder5(10)
  87. verify(inc(1) == 2)
  88. verify(plus10(-2) == 8)
  89. print '6. nesting plus free ref to global'
  90.  
  91. def make_adder6(x):
  92.     global global_nest_x
  93.     
  94.     def adder(y):
  95.         return global_nest_x + y
  96.  
  97.     global_nest_x = x
  98.     return adder
  99.  
  100. inc = make_adder6(1)
  101. plus10 = make_adder6(10)
  102. verify(inc(1) == 11)
  103. verify(plus10(-2) == 8)
  104. print '7. nearest enclosing scope'
  105.  
  106. def f(x):
  107.     
  108.     def g(y):
  109.         x = 42
  110.         
  111.         def h(z):
  112.             return x + z
  113.  
  114.         return h
  115.  
  116.     return g(2)
  117.  
  118. test_func = f(10)
  119. verify(test_func(5) == 47)
  120. print '8. mixed freevars and cellvars'
  121.  
  122. def identity(x):
  123.     return x
  124.  
  125.  
  126. def f(x, y, z):
  127.     
  128.     def g(a, b, c):
  129.         a = a + x
  130.         
  131.         def h():
  132.             return identity(z * (b + y))
  133.  
  134.         y = c + z
  135.         return h
  136.  
  137.     return g
  138.  
  139. g = f(1, 2, 3)
  140. h = g(2, 4, 6)
  141. verify(h() == 39)
  142. print '9. free variable in method'
  143.  
  144. def test():
  145.     method_and_var = 'var'
  146.     
  147.     class Test:
  148.         
  149.         def method_and_var(self):
  150.             return 'method'
  151.  
  152.         
  153.         def test(self):
  154.             return method_and_var
  155.  
  156.         
  157.         def actual_global(self):
  158.             return str('global')
  159.  
  160.         
  161.         def str(self):
  162.             return str(self)
  163.  
  164.  
  165.     return Test()
  166.  
  167. t = test()
  168. verify(t.test() == 'var')
  169. verify(t.method_and_var() == 'method')
  170. verify(t.actual_global() == 'global')
  171. method_and_var = 'var'
  172.  
  173. class Test:
  174.     
  175.     def method_and_var(self):
  176.         return 'method'
  177.  
  178.     
  179.     def test(self):
  180.         return method_and_var
  181.  
  182.     
  183.     def actual_global(self):
  184.         return str('global')
  185.  
  186.     
  187.     def str(self):
  188.         return str(self)
  189.  
  190.  
  191. t = Test()
  192. verify(t.test() == 'var')
  193. verify(t.method_and_var() == 'method')
  194. verify(t.actual_global() == 'global')
  195. print '10. recursion'
  196.  
  197. def f(x):
  198.     
  199.     def fact(n):
  200.         if n == 0:
  201.             return 1
  202.         else:
  203.             return n * fact(n - 1)
  204.  
  205.     if x >= 0:
  206.         return fact(x)
  207.     else:
  208.         raise ValueError, 'x must be >= 0'
  209.  
  210. verify(f(6) == 720)
  211. print '11. unoptimized namespaces'
  212. check_syntax('def unoptimized_clash1(strip):\n    def f(s):\n        from string import *\n        return strip(s) # ambiguity: free or local\n    return f\n')
  213. check_syntax('def unoptimized_clash2():\n    from string import *\n    def f(s):\n        return strip(s) # ambiguity: global or local\n    return f\n')
  214. check_syntax('def unoptimized_clash2():\n    from string import *\n    def g():\n        def f(s):\n            return strip(s) # ambiguity: global or local\n        return f\n')
  215. check_syntax('def error(y):\n    exec "a = 1"\n    def f(x):\n        return x + y\n    return f\n')
  216. check_syntax("def f(x):\n    def g():\n        return x\n    del x # can't del name\n")
  217. check_syntax('def f():\n    def g():\n         from string import *\n         return strip # global or local?\n')
  218. exec '\ndef noproblem1():\n    from string import *\n    f = lambda x:x\n\ndef noproblem2():\n    from string import *\n    def f(x):\n        return x + 1\n\ndef noproblem3():\n    from string import *\n    def f(x):\n        global y\n        y = x\n'
  219. print '12. lambdas'
  220.  
  221. f1 = lambda x: (lambda y: x + y)
  222.  
  223. inc = f1(1)
  224. plus10 = f1(10)
  225. verify(inc(1) == 2)
  226. verify(plus10(5) == 15)
  227.  
  228. f2 = lambda x: (lambda : (lambda y: x + y)
  229. )()
  230.  
  231. inc = f2(1)
  232. plus10 = f2(10)
  233. verify(inc(1) == 2)
  234. verify(plus10(5) == 15)
  235.  
  236. f3 = lambda x: (lambda y: global_x + y)
  237.  
  238. global_x = 1
  239. inc = f3(None)
  240. verify(inc(2) == 3)
  241.  
  242. f8 = lambda x, y, z: (lambda a, b, c: (lambda : z * (b + y))
  243. )
  244.  
  245. g = f8(1, 2, 3)
  246. h = g(2, 4, 6)
  247. verify(h() == 18)
  248. print '13. UnboundLocal'
  249.  
  250. def errorInOuter():
  251.     print y
  252.     
  253.     def inner():
  254.         return y
  255.  
  256.     y = 1
  257.  
  258.  
  259. def errorInInner():
  260.     
  261.     def inner():
  262.         return y
  263.  
  264.     inner()
  265.     y = 1
  266.  
  267.  
  268. try:
  269.     errorInOuter()
  270. except UnboundLocalError:
  271.     pass
  272.  
  273. raise TestFailed
  274.  
  275. try:
  276.     errorInInner()
  277. except NameError:
  278.     pass
  279.  
  280. raise TestFailed
  281. print '14. complex definitions'
  282.  
  283. def makeReturner(*lst):
  284.     
  285.     def returner():
  286.         return lst
  287.  
  288.     return returner
  289.  
  290. verify(makeReturner(1, 2, 3)() == (1, 2, 3))
  291.  
  292. def makeReturner2(**kwargs):
  293.     
  294.     def returner():
  295.         return kwargs
  296.  
  297.     return returner
  298.  
  299. verify(makeReturner2(a = 11)()['a'] == 11)
  300.  
  301. def makeAddPair(.0):
  302.     (a, b) = .0
  303.     
  304.     def addPair(.0):
  305.         (c, d) = .0
  306.         return (a + c, b + d)
  307.  
  308.     return addPair
  309.  
  310. verify(makeAddPair((1, 2))((100, 200)) == (101, 202))
  311. print '15. scope of global statements'
  312. x = 7
  313.  
  314. def f():
  315.     x = 1
  316.     
  317.     def g():
  318.         
  319.         def i():
  320.             
  321.             def h():
  322.                 return x
  323.  
  324.             return h()
  325.  
  326.         return i()
  327.  
  328.     return g()
  329.  
  330. verify(f() == 7)
  331. verify(x == 7)
  332. x = 7
  333.  
  334. def f():
  335.     x = 1
  336.     
  337.     def g():
  338.         x = 2
  339.         
  340.         def i():
  341.             
  342.             def h():
  343.                 return x
  344.  
  345.             return h()
  346.  
  347.         return i()
  348.  
  349.     return g()
  350.  
  351. verify(f() == 2)
  352. verify(x == 7)
  353. x = 7
  354.  
  355. def f():
  356.     x = 1
  357.     
  358.     def g():
  359.         global x
  360.         x = 2
  361.         
  362.         def i():
  363.             
  364.             def h():
  365.                 return x
  366.  
  367.             return h()
  368.  
  369.         return i()
  370.  
  371.     return g()
  372.  
  373. verify(f() == 2)
  374. verify(x == 2)
  375. x = 7
  376.  
  377. def f():
  378.     x = 3
  379.     
  380.     def g():
  381.         global x
  382.         x = 2
  383.         
  384.         def i():
  385.             
  386.             def h():
  387.                 return x
  388.  
  389.             return h()
  390.  
  391.         return i()
  392.  
  393.     return g()
  394.  
  395. verify(f() == 2)
  396. verify(x == 2)
  397. print '16. check leaks'
  398.  
  399. class Foo:
  400.     count = 0
  401.     
  402.     def __init__(self):
  403.         Foo.count += 1
  404.  
  405.     
  406.     def __del__(self):
  407.         Foo.count -= 1
  408.  
  409.  
  410.  
  411. def f1():
  412.     x = Foo()
  413.     
  414.     def f2():
  415.         return x
  416.  
  417.     f2()
  418.  
  419. for i in range(100):
  420.     f1()
  421.  
  422. verify(Foo.count == 0)
  423. print '17. class and global'
  424.  
  425. def test(x):
  426.     
  427.     class Foo:
  428.         
  429.         def __call__(self, y):
  430.             return x + y
  431.  
  432.  
  433.     return Foo()
  434.  
  435. x = 0
  436. verify(test(6)(2) == 8)
  437. x = -1
  438. verify(test(3)(2) == 5)
  439. print '18. verify that locals() works'
  440.  
  441. def f(x):
  442.     
  443.     def g(y):
  444.         
  445.         def h(z):
  446.             return y + z
  447.  
  448.         w = x + y
  449.         y += 3
  450.         return locals()
  451.  
  452.     return g
  453.  
  454. d = f(2)(4)
  455. verify(d.has_key('h'))
  456. del d['h']
  457. verify(d == {
  458.     'x': 2,
  459.     'y': 7,
  460.     'w': 6 })
  461. print '19. var is bound and free in class'
  462.  
  463. def f(x):
  464.     
  465.     class C:
  466.         
  467.         def m(self):
  468.             return x
  469.  
  470.         a = x
  471.  
  472.     return C
  473.  
  474. inst = f(3)()
  475. verify(inst.a == inst.m())
  476. print '20. interaction with trace function'
  477. import sys
  478.  
  479. def tracer(a, b, c):
  480.     return tracer
  481.  
  482.  
  483. def adaptgetter(name, klass, getter):
  484.     (kind, des) = getter
  485.     if kind == 1:
  486.         if des == '':
  487.             des = '_%s__%s' % (klass.__name__, name)
  488.         
  489.         return (lambda obj: getattr(obj, des))
  490.     
  491.  
  492.  
  493. class TestClass:
  494.     pass
  495.  
  496. sys.settrace(tracer)
  497. adaptgetter('foo', TestClass, (1, ''))
  498. sys.settrace(None)
  499.  
  500. try:
  501.     sys.settrace()
  502. except TypeError:
  503.     pass
  504.  
  505. raise TestFailed, 'sys.settrace() did not raise TypeError'
  506. print '20. eval and exec with free variables'
  507.  
  508. def f(x):
  509.     return (lambda : x + 1)
  510.  
  511. g = f(3)
  512.  
  513. try:
  514.     eval(g.func_code)
  515. except TypeError:
  516.     pass
  517.  
  518. print 'eval() should have failed, because code contained free vars'
  519.  
  520. try:
  521.     exec g.func_code
  522. except TypeError:
  523.     pass
  524.  
  525. print 'exec should have failed, because code contained free vars'
  526. print '21. list comprehension with local variables'
  527.  
  528. try:
  529.     print bad
  530. except NameError:
  531.     pass
  532.  
  533. print 'bad should not be defined'
  534.  
  535. def x():
  536.     [ bad for s in 'a b' for bad in s.split() ]
  537.  
  538. x()
  539.  
  540. try:
  541.     print bad
  542. except NameError:
  543.     pass
  544.  
  545. print '22. eval with free variables'
  546.  
  547. def f(x):
  548.     
  549.     def g():
  550.         x
  551.         eval('x + 1')
  552.  
  553.     return g
  554.  
  555. f(4)()
  556.